package com.jch.mp.manner1.codec;

import com.jch.mp.manner1.domain.protocol.Packet;
import com.jch.mp.util.SerializationUtil;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

public class MsgEncoder extends MessageToByteEncoder<Packet> {

    // 传输内容全部信息：固定标识 4 字节 | 消息长度 4 字节 | 协议类型 1 字节 | 消息内容（协议类）
    // 固定长度为： 4 + 4 + 1 = 9
    @Override
    protected void encode(ChannelHandlerContext ctx, Packet msg, ByteBuf out) throws Exception {
        byte[] data = SerializationUtil.serialize(msg);
        out.writeInt(9527); // 固定标识 用于判断是否为自定义协议
        out.writeInt(data.length + 1);
        out.writeByte(msg.getCommand()); // 加入协议标识符
        out.writeBytes(data);
    }
}
